home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / console.mod (.txt) < prev    next >
Oberon Text  |  1996-08-11  |  4KB  |  122 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. ParcElems
  4. Alloc
  5. MODULE Console; (** cn, RD 1996-06-17 *)
  6. (** Console writes to StdOut of the base OS.    *)
  7. (** Only use this for debugging and error messages from modules loaded before System.Log is available.    *)
  8. (** Note: this module does not convert chars from Oberon to the base OS char table.    *)
  9. (** See and update if necessary the history at the bottom of the file.    *)
  10. IMPORT SYSTEM, HostSYS, Reals;
  11. (* Write CHAR to StdOut *)
  12. PROCEDURE Ch*(ch:CHAR);
  13. VAR str: ARRAY 2 OF CHAR;
  14. BEGIN
  15.     str[0]:=ch;
  16.     HostSYS.StdOut(str, 1)
  17. END Ch;
  18. (* Write string to StdOut *)
  19. PROCEDURE Str*(str: ARRAY OF CHAR);
  20. VAR i:INTEGER;
  21. BEGIN
  22.     i:=0; WHILE str[i]#0X DO INC(i) END;
  23.     HostSYS.StdOut(str, i)
  24. END Str;
  25. (* Write linefeed to StdOut *)
  26. PROCEDURE Ln*;    BEGIN Ch(HostSYS.toHost(00DX)) END Ln;
  27. (* Write LONGINT to StdOut *)
  28. PROCEDURE Int*(x:LONGINT);
  29.     i,n:INTEGER;
  30.     a:ARRAY 16 OF CHAR;
  31. BEGIN
  32.     a[0]:=" ";
  33.     IF x=MIN(LONGINT) THEN
  34.         Str(" -2147483648")
  35.     ELSE
  36.         i:=1;
  37.         IF x<0 THEN
  38.             a[1]:="-";
  39.             i:=2;
  40.             x:=-x
  41.         END;
  42.         n:=15;
  43.         REPEAT
  44.             a[n]:=CHR(x MOD 10+ORD('0'));
  45.             x:=x DIV 10;
  46.             DEC(n)
  47.         UNTIL x=0;
  48.         REPEAT
  49.             INC(n);
  50.             a[i]:=a[n];
  51.             INC(i)
  52.         UNTIL n=15;
  53.         HostSYS.StdOut(a,i)
  54. END Int;
  55. (* RETURN hex char of INTEGER *)
  56. PROCEDURE hexDigit(j:LONGINT):CHAR;
  57. BEGIN
  58.     IF j<10 THEN RETURN CHR(j+ORD('0')) ELSE RETURN CHR(j+(ORD('A')-10)) END
  59. END hexDigit;
  60. (* Write LONGINT to StdOut in hex format *)
  61. PROCEDURE Hex*(x:LONGINT);    (* Texts.WriteHex *)
  62.     i: INTEGER;
  63.     a: ARRAY 10 OF CHAR;
  64. BEGIN
  65.     i := 8; a[0]:=" ";
  66.     REPEAT
  67.         a[i]:=hexDigit(x MOD 10H);
  68.         x := x DIV 10H; DEC(i)
  69.     UNTIL i = 0;
  70.     HostSYS.StdOut(a,9)
  71. END Hex;
  72. (* Write anything in hex format to StdOut *)
  73. PROCEDURE Dump*(VAR a: ARRAY OF SYSTEM.BYTE);
  74.     i: LONGINT;
  75.     d: INTEGER;
  76.     s: ARRAY 3 OF CHAR;
  77. BEGIN
  78.     s[0]:=" ";
  79.     FOR i:=0 TO LEN(a)-1 DO
  80.         d:=ORD(SYSTEM.VAL(CHAR, a[i]));
  81.         s[1]:=hexDigit(d DIV 10H);
  82.         s[2]:=hexDigit(d MOD 10H);
  83.         HostSYS.StdOut(s,3)
  84. END Dump;
  85. (* Write BOOLEAN as TRUE or FALSE to StdOut *)
  86. PROCEDURE Bool*(b: BOOLEAN);
  87. BEGIN
  88.     IF b THEN Str(" TRUE") ELSE Str(" FALSE") END
  89. END Bool;
  90. (* Write LONGREAL to StdOut *)
  91. PROCEDURE Real*(x: LONGREAL);    (* Texts.WriteLongReal *)
  92.     e, n, i: INTEGER; x0: LONGREAL;
  93.     d, a: ARRAY 24 OF CHAR;
  94. BEGIN
  95.     n:=8;
  96.     e := Reals.ExpoL(x);
  97.     IF e = 0 THEN
  98.         Str("  0")
  99.     ELSIF e = 2047 THEN
  100.         Str(" NaN")
  101.     ELSE
  102.         a[0]:=" "; i:=1;
  103.         IF x < 0 THEN a[1]:="-"; i:=2 END;
  104.         e := SHORT(LONG(e - 1023) * 77 DIV 256);
  105.         IF e >= 0 THEN x := x / Reals.TenL(e) ELSE x := Reals.TenL(-e) * x END ;
  106.         IF x >= 10.0D0 THEN x := 0.1D0 * x; INC(e) END ;
  107.         x0 := Reals.TenL(n-1); x := x0*x + 0.5D0;
  108.         IF x >= 10.0D0*x0 THEN x := 0.1D0 * x; INC(e) END ;
  109.         Reals.ConvertL(x, n, d);
  110.         DEC(n); a[i]:=d[n]; INC(i); a[i]:="."; INC(i);
  111.         REPEAT DEC(n); a[i]:=d[n]; INC(i) UNTIL n = 0;
  112.         a[i]:="D"; INC(i);
  113.         IF e < 0 THEN a[i]:="-"; e := -e ELSE a[i]:="+" END; INC(i);
  114.         a[i]:=CHR(e DIV 100 + 30H); INC(i); e := e MOD 100;
  115.         a[i]:=CHR(e DIV 10 + 30H); INC(i);
  116.         a[i]:=CHR(e MOD 10 + 30H); INC(i);
  117.         HostSYS.StdOut(a, i)
  118. END Real;
  119. END Console.
  120. Date    Author    Modification
  121. 1996-06-17    degner@pallas.amp.uni-hannover.de    Created first unified version.
  122.